using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using Publicuse.Entity.AttributeUtil;

namespace Publicuse.Entity
{
    /// <summary>
    /// 登录返回状态
    /// </summary>
    public enum ImplementResult
    {
        /// <summary>
        /// 登录成功
        /// </summary>
        [ImplementResult("登录成功！")]
        UserSuccess = 200,

        /// <summary>
        /// 用户名和密码不匹配
        /// </summary>
        [ImplementResult("用户名和密码不匹配！")]
        UserError = 401,

        /// <summary>
        /// 账号已经停用,请联系管理员
        /// </summary>
        [ImplementResult("账号已经停用,请联系管理员！")]
        UserStop = 402,

        /// <summary>
        /// 验证码错误
        /// </summary>
        [ImplementResult("验证码错误！")]
        UserVerify = 403,

        /// <summary>
        /// 用户角色不明确，请联系管理员
        /// </summary>
        [ImplementResult("用户角色不明确，请联系管理员！")]
        UserRoleVague = 405,

        /// <summary>
        /// 用户锁定登录，请联系管理员
        /// </summary>
        [ImplementResult("用户锁定登录，请联系管理员！")]
        UserLock = 406,

        /// <summary>
        /// 服务器异常,请联系管理员
        /// </summary>
        [ImplementResult("服务器异常,请联系管理员！")]
        UserFail = 500,

        /// <summary>
        /// 用户没有资源，请联系管理员
        /// </summary>
        [ImplementResult("用户没有资源，请联系管理员！")]
        UserResourceVague = 407,

        /// <summary>
        /// 登录会话已过期，请重新登录
        /// </summary>
        [ImplementResult("登录会话已过期，请重新登录！")]
        UserLoginTimeOut = 408,

        /// <summary>
        /// 当前用户未知所属系统，请联系管理员
        /// </summary>
        [ImplementResult("当前用户未知所属系统，请联系管理员！")]
        UserUnknownModule = 409,

        /// <summary>
        /// 非法验证码
        /// </summary>
        [ImplementResult("非法验证码！")]
        IllegalVerify = 410,

        /// <summary>
        /// 未授权访问系统
        /// </summary>
        [ImplementResult("未授权访问系统")]
        Nopermission = 411,

        /// <summary>
        /// 服务器重启，需要重新登录
        /// </summary>
        [ImplementResult("服务器重启，需要重新登录")]
        RestartLogin = 412,

        /// <summary>
        /// 没有该操作权限,请联系管理员！
        /// </summary>
        [ImplementResult("没有该操作权限,请联系管理员！")]
        Nopermissiontooperate = 413,

        /// <summary>
        /// 用户标识和会话令牌为空
        /// </summary>
        [ImplementResult("用户标识和会话令牌为空")]
        IDTokenEmpty = 414,

        /// <summary>
        /// 登录发生未知错误FilterContext类型不匹配
        /// </summary>
        [ImplementResult("登录发生未知错误")]
        Unknownerror = 415,

        /// <summary>
        /// AuthorizationFilterContext类型不匹配
        /// </summary>
        [ImplementResult("AuthorizationFilterContext类型不匹配")]
        AuthorizationFCError = 416,

        /// <summary>
        /// 用户名、密码、验证码不能为空
        /// </summary>
        [ImplementResult("用户名、密码、验证码不能为空")]
        LoginIsNull = 417,

        /// <summary>
        /// 密码错误
        /// </summary>
        [ImplementResult("密码错误")]
        PwdError = 418,

        /// <summary>
        /// 查询异常
        /// </summary>
        [ImplementResult("查询异常")]
        DBError = 419,

        /// <summary>
        /// 参数异常
        /// </summary>
        [ImplementResult("参数异常")]
        ParameterException = 420,

        /// <summary>
        /// 数据已经存在
        /// </summary>
        [ImplementResult("数据已经存在")]
        DataExist = 421,

        /// <summary>
        /// 数据不存在
        /// </summary>
        [ImplementResult("数据不存在")]
        DataNotExist = 422,

        /// <summary>
        /// 数据已被使用
        /// </summary>
        [ImplementResult("数据已被使用")]
        DataIsUsed = 423,

        /// <summary>
        /// 登录系统密码错误次数过多，将锁定系统不能登录，请于X分钟之后再重试登录，如果不记得密码请联系管理员！
        /// </summary>
        [ImplementResult("登录系统密码错误次数过多，将锁定系统不能登录，请于{0}之后再重试登录，如果不记得密码，请联系管理员！")]
        UserRetrycountError = 424,

        /// 文件不存在
        /// </summary>
        [ImplementResult("文件不存在")]
        FileNotExist = 425,

        /// 表不存在
        /// </summary>
        [ImplementResult("表不存在")]
        TableNotExist = 426,

        /// 目录不存在
        /// </summary>
        [ImplementResult("目录不存在")]
        DirectoryNotExist = 427,

        /// 模板数据不正确
        /// </summary>
        [ImplementResult("模板数据不正确")]
        Templatefailed = 428,

        /// <summary>
        /// 黑名单禁止访问
        /// </summary>
        [ImplementResult("黑名单禁止访问")]
        Blacklist = 429,

        /// <summary>
        /// 无权限登录
        /// </summary>
        [ImplementResult("无权限登录")]
        NoLoginSystem = 430,

        /// <summary>
        /// 账号或密码错误
        /// </summary>
        [ImplementResult("账号或密码错误！")]
        UserPwd = 431,

        /// <summary>
        /// 查无账号，请联系管理员
        /// </summary>
        [ImplementResult("查无账号，请联系管理员！")]
        UserNotExit = 432,

        /// <summary>
        /// 登录系统密码错误次数已超过限制{0}次，今日将锁定账号不能登录系统，请联系管理员！
        /// </summary>
        [ImplementResult("登录系统密码错误次数已超过限制{0}次，今日将锁定账号不能登录系统，如需登录，请联系管理员！")]
        UserPwdStop = 433,

        /// <summary>
        /// 登录系统密码错误次数已超过限制{0}次，今日将锁定账号不能登录系统，请联系管理员！
        /// </summary>
        [ImplementResult("当前用户已经登录系统，不允许再次登录！")]
        UserHaveLogin = 434,

        /// <summary>
        /// 获取验证码异常,请刷新重新获取！
        /// </summary>
        [ImplementResult("获取验证码异常,请刷新重新获取！")]
        VerifyErr = 435,

        /// <summary>
        /// 执行出错，请联系管理员！
        /// </summary>
        [ImplementResult("执行出错，请联系管理员！")]
        WorkErr = 436,

        /// <summary>
        /// 无权限登录，请联系管理员！
        /// </summary>
        [ImplementResult("无权限登录，请联系管理员！")]
        LoginErr = 437,

        /// <summary>
        /// 发现非法参数！
        /// </summary>
        [ImplementResult("发现非法参数！")]
        Illegalparameter = 438,

    /// <summary>
    /// 原密码验证失败！
    /// </summary>
    [ImplementResult("原密码验证失败！")]
    UpdatePwdErr = 439,
  }

    /// <summary>
    /// 获取返回状态信息
    /// </summary>
    public static class ImplementResultExtend
    {
        /// <summary>
        /// 获取返回状态信息
        /// </summary>
        /// <param name="enumValue"></param>
        /// <param name="inputvalue"></param>
        /// <returns></returns>
        public static string GetRemark(this Enum enumValue,string inputvalue="")
        {
            string value = enumValue.ToString();
            FieldInfo field = enumValue.GetType().GetField(value);
            var att = field.GetCustomAttributes(typeof(ImplementResultAttribute), false);
            if (att != null && att.Length > 0)
            {
                ImplementResultAttribute remarkAttribute = att[0] as ImplementResultAttribute;
                if (inputvalue.Split('|').Length == 1)
                {
                    return string.Format(remarkAttribute.Remark, inputvalue);
                }
                else if (inputvalue.Split('|').Length == 2)
                {
                    return string.Format(remarkAttribute.Remark, inputvalue.Split('|')[0], inputvalue.Split('|')[1]);
                }
            }
            return enumValue.ToString();
        }

        /// <summary>
        /// 获取返回Remark属性值信息
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public static string GetRemark(this PropertyInfo info)
        {
            var result = string.Empty;
            var att = info.GetCustomAttributes(typeof(RemarkAttribute), false);
            if (att != null && att.Length > 0)
            {
                RemarkAttribute remarkAttribute = att[0] as RemarkAttribute;
                result = remarkAttribute.GetName;
            }
            return result;
        }
    }
}
